﻿#ifndef TASKOBJ_H
#define TASKOBJ_H

#include "instobj.h"
//#include "typeconvert.h"
#include "objectfactory.h"


namespace Ui {
class AddPortEditor;
}

namespace xvs {


class TaskObjData;

/**
 * @brief The TaskObj class 任务类 (FormTask,while,for,etc)
 */
class OBJLIB_EXPORT TaskObj: public InstObj// : public XVObject , public IExecuteable
{
    Q_OBJECT
public:
    TaskObj();
    virtual ~TaskObj();

    virtual int Execute() override;

//    TaskObj* copy();

    virtual QJsonObject Save(const QString& path) override;
    void Load(QJsonObject &json,const QString& path) override;

//    InstObj*  GetInputAttrInst();
//    InstObj*  GetOutputAttrInst();

public:
    /**
     * @brief AddInstObj    根据名称添加指令对象
     * @param name          指令名称
     * @param itemType      数组用（数组内部项）
     * @param index         -1=添加  !-1=插入  超出范围=-1(添加)
     * @return              添加成功的指令对象
     */
    InstObj* AddInstObj(const QString& name, QString itemType = "", int index = -1);

private:
    void  ExecteInst(InstObj*  instObj);

private:
    TaskObjData* d_ptr;
};

}

#endif // TASKOBJ_H
